package com.example.demo.utils;

import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class CurrentDatetime {

    // https://blog.csdn.net/tanhongwei1994/article/details/86680845

    private final static DateTimeFormatter TIME_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    private final static DateTimeFormatter DAY_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    private final static DateTimeFormatter HOUR_FORMATTER = DateTimeFormatter.ofPattern("HH:mm:ss");

    /**
     * 获取系统当前时间(不包含时分秒)
     *
     * @return 返回年月日
     */
    public static String getCurrentLocalDate() {
        return DAY_FORMATTER.format(LocalDateTime.now());
    }

    /**
     * 获取当前时间的时分秒
     *
     * @return 返回时分秒
     */
    public static LocalTime getCurrentLocalTime() {
        return LocalTime.now().withNano(0);
    }

    /**
     * 获取当前时间（包含时分秒）
     *
     * @return 返回年月日时分秒
     */
    public static String getCurrentLocalDateTime() {
        return TIME_FORMATTER.format(LocalDateTime.now());
    }

    /**
     * 格式化为年月日时分秒
     *
     * @param dateStr 传入年月日时分秒
     * @return 返回格式化的值，无法格式化的报错
     */
    public static LocalDateTime parseLocalDateTime(String dateStr) {
        return LocalDateTime.parse(dateStr, TIME_FORMATTER);
    }

    /**
     * 格式化为年月日
     *
     * @param dateStr  传入年月日
     * @return 返回格式化的值，无法格式化的报错
     */
    public static LocalDate parseLocalDate(String dateStr) {
        return LocalDate.parse(dateStr, DAY_FORMATTER);
    }

    /**
     * 格式化为时分秒
     *
     * @param timeStr 传入时分秒
     * @return 返回格式化的值，无法格式化的报错
     */
    public static LocalTime parseLocalTime(String timeStr) {
        return LocalTime.parse(timeStr, HOUR_FORMATTER);
    }

    /**
     * 相隔多天，传入字符串格式为"2019-06-01"
     * @param startTime 开始时间
     * @param endTime   结束时间
     * @return 返回具体天数
     */
    public static long periodDays(String startTime, String endTime) {
        LocalDate startDate = parseLocalDate(startTime);
        LocalDate endDate = parseLocalDate(endTime);
        return startDate.until(endDate, ChronoUnit.DAYS);
    }

    /**
     *相隔多少秒，传入字符串格式为"16:40:00"
     * @param startTime 开始时间的时分秒
     * @param endTime   结束时间的时分秒
     * @return 返回具体相差多少M
     */
    public static long periodHours(String startTime, String endTime){
        LocalTime startDate = parseLocalTime(startTime);
        LocalTime endDate = parseLocalTime(endTime);
        return Duration.between(startDate, endDate).get(ChronoUnit.SECONDS)/3600;
    }

}
